#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "hash.h"

#define TAMMAXNOME 100

/*void LeAluno(Aluno *a) {
   char buf[TAMMAXNOME];
   scanf("%d \"%[^\"]\"", &a->ra, buf);

   a->nome = malloc(strlen(buf)+1);
   strcpy(a->nome, buf);
   return;
} */

void LeAluno(Aluno *aluno)
{
	char nome[TAMMAXNOME];
	int ra;
	
	scanf("%d", &ra);
	scanf(" \"%[^\"]\"", nome);
	
	strcpy(aluno->nome, nome);
	aluno->ra = ra;
}

/* le apenas o nome para consultar */
void LeAluno2(Aluno *aluno)
{
	char nome[TAMMAXNOME];
	
	scanf(" \"%[^\"]\"", nome);
	
	strcpy(aluno->nome, nome);
}

/*void lelinha() {
   int c;
   do { c=getchar(); } while (c!='\n');
} */

int main(int argc, char *argv[]) {
   /* ----------------------------------------------------------------------
      Declarações e início para verificação do uso da memória dinâmica.
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */


//Completar codigo aqui

	Aluno aluno;
	Hash vet[13];
	char comando[100];
	
	inicializaHash(vet);
	
	while (scanf("%s", comando) > 0)
	{ 
	
		if ( strcmp(comando,"insere") == 0 )
		{
			LeAluno(&aluno);
			/* insere aluno na tabela hash */
			insereAluno(aluno, &vet);
		} 
		else if ( strcmp(comando, "remove") == 0 )
		{
			LeAluno(&aluno);
			removeAluno(aluno, &vet);
		} 
		else if ( strcmp(comando, "consulta") == 0 )
		{
			LeAluno2(&aluno);
			consultaAluno(aluno, &vet);
		} 
		else if ( strcmp(comando, "imprime") == 0 )
		{
			imprime(&vet);
		}
		
		else if ( strcmp(comando, "sair") == 0 ) 
		{
			LiberaHash(vet);
			break;
		} 
		else
		{
			printf("Comando desconhecido: %s\n", comando);
		} 
	}
	



   /* --------------------------------------------------------------------- */
   /* Verificação final do uso da memória dinâmica                          */
   /* --------------------------------------------------------------------- */
   info = mallinfo();
   MemDinFinal = info.uordblks;
   if (MemDinInicial!=MemDinFinal)
      printf("\n\nMemoria dinamica nao foi totalmente liberada (%d, %d)\n",
	     MemDinInicial,MemDinFinal);
   /* --------------------------------------------------------------------- */
   return 0;
}
